home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / LEZIONI / LEZIONE4.TXT < prev    next >
Text File  |  1994-10-30  |  45KB  |  905 lines

  1.  
  2.  CORSO DI ASSEMBLER - LEZIONE 4
  3.  
  4. In questa lezione impareremo a visualizzare delle figure in varie risoluzioni
  5. tramite la copperlist. Fino ad ora abbiamo potuto cambiare solo il colore0,
  6. ossia il $dff180, con cui abbiamo fatto delle sfumature, ma chiaramente le
  7. figure non si fanno a forza di WAIT!!! Per visualizzare una normale figura IFF,
  8. creata col Deluxe Paint, Digitalizzata, scannerizzata o renderizzata con un
  9. programma di ray tracing quali Imagine o Real 3d non serve alcun WAIT!!!!
  10. Basta dire al copper che risoluzione grafica ha la figura (numero di colori,
  11. risoluzione hires o lowres, interlacciata o meno) tramite il registro BPLCON0,
  12. ossia il $dff100, che per ora abbiamo sempre mantenuto col valore $200, che
  13. indica: SOLO IL COLORE DI SFONDO SENZA IMMAGINI IN "SOVRAIMPRESSIONE".
  14. E' per questo che se in una copperlist del genere cambiamo ad esempio il
  15. color1, ossia $dff182, non accade nulla: perche' non e' abilitato nessun
  16. BITPLANE, ossia "piano di bit", ma solo lo "SFONDO", il cui colore puo' essere
  17. cambiato col $dff180. Dopo aver definito il numero di colori e la risoluzione
  18. grafica (ad esempio 320x200 pixel, dove per PIXEL si intende ognuno dei piccoli
  19. punti che compongono la figura), avendo indicato dove si trova la figura da
  20. visualizzare mettendo il suo indirizzo negli appositi PUNTATORI (registri come
  21. il $dff080 (COP1LC) dove invece viene messo l'indirizzo dei bitplane), bisogna
  22. definire i colori della figura, ossia la PALETTE ( cioe' la "TAVOLOZZA" dei
  23. colori definita dal programma di disegno (es. DeLuxe Paint) per la figura
  24. in questione), oppure la figura apparira' con i colori sbagliati.
  25. In pratica dobbiamo mettere in copperlist i registri colore necessari, se
  26. la figura e' a 4 colori dobbiamo definire i 4 colori:
  27.  
  28.     dc.w    $180,$xxx    ; color 0
  29.     dc.w    $182,$xxx    ; color 1
  30.     dc.w    $184,$xxx    ; color 2
  31.     dc.w    $186,$xxx    ; color 3
  32.  
  33. Questo pezzo di copperlist comunque lo salva direttamente il KEFCON
  34.  
  35. Ci sono anche altri REGISTRI che regolano la dimensione della figura per
  36. farla di dimensioni "SPECIALI", come l'OVERSCAN che la rende piu' grande, o
  37. si puo' fare una "finestrella" che occupi solo una parte dello schermo.
  38. Altri registri speciali sono i MODULI, usati spesso per gli effetti di
  39. allungamento delle figure. Nei primi esempi comunque manterremo i registri
  40. speciali azzerati o comunque con i valori normali per visualizzare una
  41. figura. Innanzitutto deve essere chiaro che c'e' differenza tra un file IFF,
  42. ossia una figura nel formato standard caricabile dal DeLuxe Paint, e la
  43. figura REALE (detta RAW o BITMAP) che sta in memoria e viene visualizzata dal
  44. copper. Nel disco e' presente un programmino capace appunto di convertire
  45. figure in formato IFF nel formato RAW indispensabile per visualizzare le
  46. figure direttamente con il COPPER. Le figure in realta' sono composte di molti
  47. 0 ed 1, come tutti i dati BINARI in memoria. Abbiamo gia' visto che ogni dato
  48. in memoria e' composto di BIT, ossia di zeri e di 1, che sono gli unici 2 stati
  49. possibili della memoria (essendo possibile solo PASSAGGIO DI CORRENTE e ASSENZA
  50. DI CORRENTE); per comodita' usiamo il sistema decimale e esadecimale, ma la
  51. realta' e' sempre quella dei BIT. Allora come e' possibile visualizzare una
  52. figura a 32 colori quando i bit possono essere solo 0 ed 1??? Se mettessimo in
  53. memoria una specie di foglio di carta a quadretti con dei quadretti anneriti
  54. (ossia 1) ed altri bianchi (ossia zero) potremmo solamente lavorare con 2
  55. colori, il nero e il bianco, come i vecchi computer con i monotor a fosfori
  56. verdi che potevano visualizzare solo il colore di sfondo (i bit a zero) e
  57. certi disegni o parole fatte di bit accesi (ad 1).
  58. Con il COPPER si puo' anche operare in questo modo, a 2 colori, basta ACCENDERE
  59. UN SOLO BITPLANE. In questo caso dovremo mettere in memoria la figura RAW,
  60. composta similmente al foglio di carta millimetrata descritto prima, con dei
  61. punti "accesi" e dei punti "spenti". Fino qui tutto dovrebbe essere chiaro:
  62. e' come fare la battaglia navale! Una nave sarebbe per esempio fatta di un
  63. certo numero di PIXEL (punti), allo stesso modo si puo' fare qualsiasi cosa:
  64.  
  65.  UN UOMO:                  UN AEREO (ho risparmiato gli zeri!)
  66.                               11
  67. 000011100000          000001100000             1111
  68. 000001000000          000010010000             1111
  69. 000111111000          000010010000         111111111111111111111
  70. 000101101000          000111111000       1111111111111111111111111
  71. 000101101000          000100001000             1111
  72. 000011110000          000100001000             1111
  73. 000010010000                        111111
  74. 000010010000         UNA "A"                   11111111
  75. 000010010000
  76. 000110011000
  77.  
  78. Quando la figura e' grande conviene chiaramente farsela col programma di
  79. disegno o scannerizzarla, poi convertirla in RAW (0000110101...) col programma
  80. in questo disco (KEFCON). Per definire il colore di sfondo (gli zeri) bastera'
  81. mettere un dc.w $180,$000 (nero), per definire il colore degli 1 bastera'
  82. mettere un dc.w $182,$0f0 (verde).
  83. Per le figure a piu' colori il trucco e' questo: i vari BITPLANES, ossia PIANI
  84. di BIT (0001010 ecc.) vengono "SOVRAPPOSTI" in una specie di TRASPARENZA,
  85. per cui dove vengono sovrapposti due "1" appare un certo colore, dove sono
  86. sovrapposti tre "1" appare un altro colore eccetera. Tutto questo non va
  87. calcolato!!! Basta caricarsi la figura con l'Iffconverter e salvarla in RAW,
  88. poi mettere il numero dei colori e la risuluzione nel $dff100 (bplcon0), dire
  89. al copper dove abbiamo messo la figura RAW, mettere i colori giusti (che
  90. salva direttamente l'iffconverter separatamente), e la figura appare senza
  91. problemi. L'importante e' aver chiaro il procedimento, in pratica poi per
  92. convertire l'immagine IFF in RAW e modificare il sorgente ci vogliono due
  93. minuti.
  94. Innanzitutto chiariamo cosa fa l'iffconverter (nel nostro caso usiamo quello
  95. chiamato KEFCON, che potete caricare spostando la finestra dell'asmone e
  96. scrivendo nel MENU del DOS il suo nome; esistono iffconverters piu' recenti e
  97. con piu' opzioni, alcune delle quali spesso inutili, ma per ragioni di spazio
  98. e di compatibilita' con kickstart 1.3 ho deciso di mettere questo nel corso,
  99. poi c'e' anche il fatto che e' programmato usando i registri hardware anziche'
  100. il sistema operativo, dunque e' in linea col corso. Se volete usare altri
  101. iffconverters fate pure, ma prima imparate ad usare questo, che e' stato usato
  102. per fare giochi e demo gloriosi). Una immagine nella realta' abbiamo
  103. visto che e' un insieme di piani di bit, piu' piani per piu' colori, un piano
  104. solo per 2 colori. Abbiamo anche visto che per essere visualizzata servono
  105. i colori giusti (la palette) e la risoluzione giusta nel $dff100 (bplcon0); i
  106. programmatori dell'Amiga decisero di creare un formato particolare per
  107. memorizzare le figure e trasferirle da un programma all'altro: questo formato
  108. per l'Amiga e' l'IFF ILBM, ed e' in pratica composto da i bitplanes compattati
  109. con una certa routine per prendere meno spazio, con attaccata la palette e
  110. la risoluzione; un programma quando carica un immagine IFF scompatta i PIANI
  111. compattati, mette la palette a posto nei registri dei colori ($dff180,$dff182,
  112. $dff184 eccetera) e la risoluzione nel $dff100, il BPLCON0 (Sommariamente).
  113. Allo stesso modo quando ha una immagine in memoria, per salvarla in IFF deve
  114. comprimere i BITPLANES nel formato IFF, attaccarci la palette e il resto.
  115. L'Iffconverter fa queste operazioni: puo' caricare un RAW, e salvarlo in IFF,
  116. a patto che gli si dia la PALETTE e la RISOLUZIONE giusta, oppure puo'
  117. caricare un immagine IFF e salvarla in RAW, e puo' salvare la PALETTE gia
  118. nel formato dc.b $180,xxx,$182,xxx, ossia la PALETTE gia' da inserire nella
  119. copperlist. In altri computer si utilizzano diversi formati per le figure,
  120. ad esempio il GIF, il PCX e il TIFF sono usati dai PC MSDOS; oltre ad essere
  121. diversamente COMPRESSE le figure RAW+PALETTE, in questi computer e' diverso
  122. anche il sistema di visualizzazione, infatti hanno il sistema CHUNKY anziche'
  123. bitplane, un sistema utile quando si debbono gestire 256 colori, ma meno
  124. capace di quello Amiga per quanto riguarda gli SCROLL (scorrimenti) e senza
  125. possibilita' di cambiare la PALETTE come fa il COPPER con i WAIT.
  126. Le possibili risoluzioni grafiche dell'Amiga normale (non AGA) sono queste:
  127.  
  128. 320x256 PIXEL detta LOW RES (bassa risoluzione)
  129. 640x256 PIXEL detta HIGH RES (alta risoluzione)
  130.  
  131. L'immagine puo' essere anche piu' lunga (312 linee in overscan) oppure lunga
  132. il doppio (tramite l'interlace che pero' causa uno sfarfallamento).
  133. Anche la larghezza puo' essere leggermente aumentata con l'OVERSCAN.
  134.  
  135. Le immagini in LOW RES (larghe 320 pixel) possono avere fino ad un massimo
  136. di 32 colori, ci sono poi 2 modi speciali detti EHB (Extra Half Bright) e
  137. HAM (Hold And Modify) che visualizzano rispettivamente 64 e 4096 colori, ma
  138. hanno delle limitazioni particolari che vedremo.
  139. Le immagini in HIGH RES (alta risoluzione) possono avere un massimo di 16
  140. colori e non dispongono di modi speciali.
  141. I giochi sono quasi tutti in LOW RES, per sfruttare il maggior numero di colori
  142. disponibili, per il risparmio di memoria (che purtroppo FINISCE!), e per la
  143. maggiore velocita' raggiungibile (infatti l'HIGH RES rallenta le operazioni
  144. maggiormente del LOW RES, inoltre bisognerebbe spostare pezzi piu' grandi di
  145. memoria essendo l'immagine larga il doppio!).
  146. Analizziamo la tecnica di visualizzazione dei colori: abbiamo detto che il
  147. massimo dei colori in lowres e' 32 (senza contare i modi speciali); e'
  148. possibile scegliere una risoluzione video con 2,4,8,16 o 32 colori. Questo
  149. perche' sono determinati dalla sovrapposizione di BIT, dunque ogni bitplane
  150. che "SOVRAPPONIAMO" aggiungiamo 2 bit ad ogni "PIXEL" che diventa "PIU'
  151. PROFONDO" di 2 bit: ora con 2 bit si puo' ottenere soltanto 0 ed 1, ossia
  152. 2 colori, allora la risoluzione 320x200 a 2 colori avra' un solo BITPLANE,
  153. come abbiamo gia' detto. Aggiungendo un altro bitplane i colori possibili
  154. diventano 4, infatti si possono verificare 4 situazioni di sovrapposizione
  155. per ogni PIXEL: 00,01,10,11 ossia "entrambi i bit a zero", "primo bitplane a
  156. zero e secondo ad 1", "primo bitplane ad 1 e secondo a zero", "entrambi i
  157. bitplane ad 1". Aggiungendo un altro bitplane si possono verificare 8
  158. situazioni diverse (corrispondenti a 8 colori diversi):
  159. 000,001,010,011,100,101,110,111   (3 bitbplanes=3 bit per PIXEL=8 possibilita')
  160. Aggiungendo un bitplane, il quarto, arriviamo ad 4 bit possibili per PIXEL,
  161. ossia 16 diverse possibilita' per 16 colori:
  162. 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111
  163. Lo stesso vale per il quinto bitplane, che porta a 5 il numero di bit per
  164. pixel, ossia 32 colori possibili. Dunque ogni bitplane eleva alla seconda il
  165. numero dei colori:
  166.  
  167. 0 bitplane = solo il colore di sfondo COLOR00 ($dff180), 1 COLORE
  168. 1 bitplane = 2 COLORI
  169. 2 bitplane = 4 COLORI (2*2, ossia 2 alla seconda)
  170. 3 bitplane = 8 COLORI (2*2*2, ossia 2 alla terza)
  171. 4 bitplane = 16 COLORI (2*2*2*2, ossia 2 alla quarta)
  172. 5 bitplane = 32 COLORI (2*2*2*2*2, ossia 2 alla quinta)
  173.  
  174. L'Amiga ha 32 registri per i 32 colori possibili in LOWRES, che partono dal
  175. COLOR0 per arrivare fino al COLOR31 (la numerazione parte contando lo zero come
  176. per i bit). Il color0 e' il $dff180, seguito dagli altri:
  177.  
  178. $dff182 = COLOR1
  179. $dff184 = COLOR2
  180. $dff186 = COLOR3
  181. $dff188 = COLOR4
  182. $dff18a = COLOR5
  183. eccetera...
  184.  
  185. per esempio se un pixel di una immagine lowres a 16 colori e' del colore
  186. dello "SFONDO", ossia del COLOR0, modificabile agendo sul $dff180, vuol dire
  187. che tutti e 4 i bitplanes sono a zero: 0000, mentre un pixel che ha il colore
  188. 32, detto COLOR31, sara' il risultato di questa combinazione binaria: 1111.
  189. Gli altri colori sono il frutto delle altre combinazioni. L'amiga 1200 dispone
  190. di 8 bitplanes al massimo con il suo CHIPSET AGA, infatti puo' generare 256
  191. colori (2 all'ottava=256), infatti nei programmi grafici AGA si possono
  192. scegliere anche risoluzioni con 64 colori (6 planes), 128 colori (7 planes).
  193. Una schermata video e' detta anche PLAYFIELD.
  194. Vediamo di calcolare quanta memoria occupa una figura a 2 colori in 320*256:
  195. ogni linea ha 320 pixel, essendo un byte composto di otto bit, in una linea ci
  196. sono 40 byte (infatti 8*40=320). Allora bastera' moltiplicare 40, ossia il
  197. numero di byte per linea, per il numero delle linee, cioe' 256: 40*256=10240.
  198. Dunque un bitplane in lowres occupa 10240 bytes. Allora possiamo calcolare
  199. anche una figura con 4 colori, ossia 2 bitplanes: 40*256*2=20480.
  200. Dunque per una figura in LOWRES standard basta moltiplicare 40*256*bitplanes.
  201. Stabilito che in LOWRES ci sono 320 bit per linea, ossia 40 bytes, in HIRES
  202. essendo largo il doppio ci saranno 80 bytes per linea: 80*256*bitplanes.
  203. In definitiva, la formula generale per calcolare la grandezza e':
  204.  
  205.     Byte per linea * linee del playfield * numero bitplane
  206.  
  207. Analizziamo ora il BPLCON0, il registro dove va indicata la risoluzione e
  208. il numero dei colori:    ( Potete leggere un riassunto scrivendo "=C 100" )
  209.  
  210.     $dff100 - BPLCON0
  211.  
  212.  Bit Plane Control Register 0    (1 word, ossia 16 bit, dallo 0 al 15)
  213.  
  214.  NUMERO DEL BIT            (nota: bit ad 1 = ON, bit a 0 = OFF)
  215.  
  216.     15    -    HIRES    Modo hires (1=640x256 , 0=320x256)
  217.     14    -    BPU2    \
  218.     13    -    BPU1     ) 3 bit per scegliere il numero di bitplanes
  219.     12    -    BPU0    /
  220.     11    -    HOMOD    Hold And Modify mode (HAM 4096 colori)
  221.     10    -    DBLPF    Double playfield
  222.     09    -    COLOR    video composito (per il GENLOCK)
  223.     08    -    GAUD    Genlock audio
  224.     07    -    X
  225.     06    -    X
  226.     05    -    X
  227.     04    -    X
  228.     03    -    LPEN    Lightpen (Penna ottica)
  229.     02    -    LACE    Interlacciato (320x512 o 640x512)
  230.     01    -    ERSY    External resync (Per il GENLOCK)
  231.     00    -    X
  232.  
  233. Questo registro e' BITMAPPED, ossia ogni suo bit ha una funzione:
  234.  
  235. - Il bit 15 abilita il modo hires: questo modo grafico visualizza 640 pixel
  236.   per linea orizzontale invece di 320. Ricordatevi di mettere DDFSTART/STOP
  237.   a $003c e $00d4 anziche $0038 e $00d0, altrimenti non verranno visualizzate
  238.   le prime linee del bordo sinistro!
  239. - I bit 14-12 servono a stabilire il NUMERO di plane da accendere, NON quali
  240.   plane; infatti i bit sono 3 ed i plane possibili sono 6.
  241.   Qui bisogna scrivere QUANTI plane da accendere, proprio come un numero, NON
  242.   selezionando QUALI. Es.: '3', '0', '6'.
  243.   In 3 bit, infatti, sono esprimibili 8 numeri, dallo 0 al 7.
  244.   Ripeto: LAVORATE CON UN NUMERO VERO E PROPRIO IN BINARO A 3 BIT, NON CON
  245.   SINGOLI BIT DA ACCENDERE O SPENGERE, A DIFFERENZA DEGLI ALTRI BIT !
  246. N.B.: Scrivendo '0' (=%000) si spengono tutti i plane, scrivendo %101 se
  247.   ne accendono 5; con 6 plane si attiva l' HALF-BRIGHT mode a 64 colori.
  248. - Il bit 11 serve ad azionare il modo HAM (vanno accesi 6 plane)
  249.   L' HAM consente agli amiga normali di visualizzare 4096 colori, l' HAM8
  250.   permette agli Amiga 1200/4000 di visualizzarne 262144.
  251. - Il bit 10 consente di attivare il modo Dual PlayField, uno speciale modo
  252.   a 2, 4 o 6 plane che permette di creare due schermi da 1, 2 o 3 plane
  253.   ciascuna, chiamati PlayField1 e PlayField2, accavallati l' uno sull' altro
  254.   in trasparenza renedendo trasparente il colore 0 del PlayField sovrastante.
  255.   E' possibile creare, quindi, un effetto parallattico simile a quello presente
  256.   in molti giochi. Per esempio, si potrebbe utilizzare un PlayField a 3 plane
  257.   (8 colori) per l' area di gioco ed un altro PlayField di sfondo, che magari
  258.   scrolla (scorre) piu' lentamente per dare un maggiore senso di profondita',
  259.   raffigurante pianure e montagne.
  260.   Appena settato il bit i plane dispari (1,3,5) formano in playfield1, mentre
  261.   quelli pari (2,4,6) il secondo: l' hardware, appena attivato il bit DPF,
  262.   raggruppa cosi' i plane per poterli rendere indipendenti, dato che, come
  263.   vedremo, esistono registri di scroll ed altri che distinguono parametri
  264.   per plane pari e dispari, usati anche per controllare indipendentemente
  265.   due interi playfield in dual mode !
  266. N.B.: Il modo DualPlayField consente di sovrapporre solo 2 schermi e, comunque,
  267.       di analoga risoluzione grafica (es.: Hires+Hires, Lowres+Lowres, ecc...).
  268. - Il bit 9 serve ad attivare anche l' uscita videocomposita degli Amiga posta
  269.   accanto a quella RGB del monitor. Personalmente, la attivo sempre per
  270.   consentire di vedere qualcosa sul monitor durante i miei prodotti anche a
  271.   chi non possiede un monitor RGB standard. SETTATELO SEMPRE AD 1.
  272. - Il bit 8 attiva l' audio di un eventuale genlock collegato all' Amiga: non
  273.   serve praticamente a niente, sorvoliamo.
  274. - Il bit 7 e' usato solo dai chipset evoluti dell'A1200, su amiga normale non
  275.   ha funzioni. Ricordatevi comunque di lasciare sempre a zero questi bit
  276.   inutilizzati, altrimenti su a1200 rischiate di compromettere il funzionamento
  277.   del vostro demo/gioco/programma.
  278. - Il bit 6 non ha funzioni su amiga normale, lasciatelo a zero.
  279. - Il bit 5 lasciatelo a zero
  280. - Il bit 4 lasciatelo a zero
  281. - Il bit 3 serve a far ricevere le coordinate della penna ottica nei registri
  282.   VHPOS ($dff006) e VPOS ($dff004) del pennello elettronico. La penna ottica
  283.   su Amiga non e' utilizzata quasi mai, non interessa questa opzione.
  284. - Il bit 2 imposta il modo InterLace, che consente la visualizzazione di
  285.   una videata con doppia risoluzione verticale, ma interlacciata. (512 linee)
  286.   Vedremo in seguito come funziona questa modalita'
  287. - Il bit 1 serve a sincronizzare il movimento del pennello con la frequenza
  288.   di qualche apparecchio esterno all' Amiga, dunque lasciatelo sempre a zero.
  289. - Il bit 0 lasciatelo a zero
  290.  
  291. Detto questo facciamo degli esempi sull' uso del $100 (BPLCON0) in copperlist:
  292.  
  293.       ; 5432109876543210
  294.  dc.w $100,%0100001000000000    ; ---> 4 plane in Lowres (320x256)
  295.  dc.w $100,%1011001000000100    ; ---> 3 plane in Hires+Interlace (640x512)
  296.  dc.w $100,%0110001000000100    ; ---> 6 plane in HALF-BRIGHT Lowres+Lace
  297.  dc.w $100,%0110101000000000    ; ---> 6 plane in HAM lowres (4096 colori)
  298.  dc.w $100,%0110011000000000    ; ---> DualPlayField 3+3 plane in Lowres
  299.  dc.w $100,%1100011000000100    ; ---> DualPlayField 2+2 in Hires+interlace
  300.  
  301. Nella lezione 3 abbiamo usato il BPLCON0 nella copperlist dandogli valore $200:
  302.  
  303.     dc.w    $100,$200
  304.  
  305. Infatti abbiamo settato solo il bit 9, che serve per attivare il genlock:
  306.  
  307.             ; 5432109876543210
  308.     dc.w    $100,%0000001000000000
  309.  
  310. Il genlock e' un apparecchio che serve per mettere in sovraimpressione
  311. titoli o grafica fatta con l'amiga su video televisivi, quindi chi non
  312. ha questo accessorio non vede cambiamenti tra una copperlist con il bit 9
  313. attivato ed una con il bit disattivato, ma conviene tenerlo sempre ad 1, per
  314. chi volesse usare il genlock con le nostre copperlist, e perche' il vecchio
  315. Amiga 1000 ha una uscita videocomposita per il monitor a colori.
  316. Dunque avremmo avuto lo stesso risultato in RGB anche con un dc.w $100,0.
  317. Come vedete, i bitplane sono ZERO, dunque c'e' solo il colore di sfondo senza
  318. figure in sovraimpressione. Per "ACCENDERE" dei bitplane basta mettere il
  319. numero di bitplanes che vogliamo, in binario, nei bit 12,13,14 del registro.
  320.  
  321. Per esempio, per fare uno schermo con 1 bitplane (2 colori): (320x256!)
  322.  
  323.             ; 5432109876543210
  324.     dc.w    $100,%0001001000000000    ; BPLCON0 - bit 12 acceso!! (1 = %001)
  325.  
  326.                 *
  327.  
  328. Per uno schermo a 2 bitplanes: (4 colori)
  329.  
  330.             ; 5432109876543210
  331.     dc.w    $100,%0010001000000000    ; BPLCON0 - bit 13 acceso!! (2 = %010)
  332.  
  333.                 *
  334.  
  335. Per uno schermo a 3 bitplanes: (8 colori)
  336.  
  337.             ; 5432109876543210
  338.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  339.  
  340.                 *
  341.  
  342. Per uno schermo a 4 bitplanes: (16 colori)
  343.  
  344.             ; 5432109876543210
  345.     dc.w    $100,%0100001000000000    ; BPLCON0 - bit 14 acceso!! (4 = %100)
  346.  
  347.                 *
  348.  
  349. Per uno schermo a 5 bitplanes: (32 colori)
  350.  
  351.             ; 5432109876543210
  352.     dc.w    $100,%0101001000000000    ; bits 14,12 accesi!! (5 = %101)
  353.  
  354.                 *
  355.  
  356. Per uno schermo a 6 bitplanes: (per modi speciali EHB e HAM 4096 colori)
  357.  
  358.             ; 5432109876543210
  359.     dc.w    $100,%0110001000000000    ; bits 14,13 accesi!! (6 = %110)
  360.  
  361. (In questa modalita' se non si mette ad 1 il bit dell'HAM (11) lo schermo
  362. e' in Extra Half Bright, se il bit 11 invece e' settato lo schermo e' HAM.
  363.  
  364.                 *
  365.  
  366. Dunque basta mettere il numero di bitplanes richiesto nei 3 bit 12,13,14
  367. del registro. Se si desidera uno schermo in hires, largo 640 pixel anziche'
  368. 320, bastera' mettere ad 1 il bit 15, il primo a sinistra, RICORDANDOSI che
  369. il massimo numero di bitplanes in HIRES e' 4 (16 colori), e che bisogna
  370. cambiare il DFFSTART ($dff092) e il DFFSTOP ($dff094) rispetto al LOWRES:
  371.  
  372.     dc.w    $92,$003c    ; DdfStart HIRES normale
  373.     dc.w    $94,$00d4    ; DdfStop HIRES normale
  374.  
  375. Lo stesso vale per l'interlacciato (lunghezza 512 linee anziche' 256), basta
  376. mettere ad 1 il bit 2.
  377.  
  378. Una volta impostato correttamente il BPLCON0, bisogna dire dove sono i bitplane
  379. che abbiamo "ATTIVATO". Per fare cio' basta mettere i loro indirizzi negli
  380. appositi registri, che sono:
  381.  
  382.     $dff0e0    = BPL0PT (puntatore bitplane 1)
  383.     $dff0e4    = BPL1PT (puntatore bitplane 2)
  384.     $dff0e8    = BPL2PT (puntatore bitplane 3)
  385.     $dff0ec    = BPL3PT (puntatore bitplane 4)
  386.     $dff0f0    = BPL4PT (puntatore bitplane 5)
  387.     $dff0f4    = BPL5PT (puntatore bitplane 6)
  388.  
  389. Anche qua si parte dallo zero, dunque si arriva al 5 per definire il sesto.
  390. Certe volte invece si puo' trovare indicato il $dff0e0 con BPL1PT, e di
  391. conseguenza si arriva al 6 per definire il sesto. L'help dell'Asmone parte
  392. da BPL0PT, potete verificare digitando "=c 0e0".
  393. Per visualizzare una figura dunque basta puntare una copperlist con il
  394. BPLCON0 giusto e i colori giusti, poi bisogna PUNTARE anche i bitplanes, ad
  395. esempio cosi':
  396.  
  397.     MOVE.L    #BITPLANE0,$dff0e0    ; indirizzo di BITPLANE0 in BPL0PT
  398.     MOVE.L    #BITPLANE1,$dff0e4    ; BPL1PT
  399.     MOVE.L    #BITPLANE2,$dff0e8    ; BPL2PT
  400.     ...
  401.  
  402. E la figura apparira' magicamente. I bitplanes comunque sono puntati nella
  403. copperlist direttamente, in quanto i puntatori devono essere riscritti ogni
  404. fotogramma.
  405.  
  406. Non bisogna mai dimenticarsi di mettere nella copperlist i registri "speciali",
  407. che per ora useremo azzerati o comunque col valore normale, altrimenti
  408. rimangono con valore della copperlist del workbench e la visualizzazione puo'
  409. essere disturbata se questi registri non erano azzerati (per esempio il
  410. workbench del kickstart 1.3 ha i MODULI azzerati, mentre il kickstart 2.0
  411. li ha con valori diversi: i giochi e le demo grafiche che vanno sul kick 1.3
  412. e invece visualizzano male le figure sul kick 2.0 spesso sono state fatte
  413. con copperlist dove mancavano i registri dei moduli, il $dff108 e $dff10a,
  414. che su kick1.3 sono a zero, dunque funzionava al collaudo, ma su kick 2.0
  415. sballano la visualizzazione. Per evitare questi problemi dunque in ogni
  416. copperlist e' sempre bene definirsi tutti i registri, anche quelli che non
  417. usiamo; i registri in questione sono:
  418.  
  419.     $dff08e - DIWSTRT, inizio finestra video - normalmente a $2c81
  420.     $dff090 - DIWSTOP, fine finestra video - normalmente a $2cc1
  421.     $dff092 - DDFSTRT, data fetch start - normalmente a $0038
  422.     $dff094 - DDFSTOP, data fetch stop - normalmente a $00d0
  423.     $dff102 - BPLCON1, Bitplane control 1 - normalmente a $0000
  424.     $dff104 - BPLCON2, Bitplane control 2 - normalmente a $0000
  425.     $dff108 - BPL1MOD, modulo bitplanes pari - normalmente a $0000
  426.     $dff10A - BPL2MOD, modulo bitplanes dispari - normalmente a $0000
  427.  
  428. Parleremo di questi registri quando li useremo per creare effetti speciali,
  429. per ora basta ricordarsi di mettere sempre all'inizio della copperlist
  430. questi registri con i valori standard:
  431.  
  432. COPPERLIST:
  433.     dc.w    $8e,$2c81    ; DiwStrt
  434.     dc.w    $90,$2cc1    ; DiwStop
  435.     dc.w    $92,$0038    ; DdfStart * NOTA: per HIRES 640x256 $003c
  436.     dc.w    $94,$00d0    ; DdfStop  * NOTA: per HIRES 640x256 $00d4
  437.     dc.w    $102,0        ; BplCon1
  438.     dc.w    $104,0        ; BplCon2
  439.     dc.w    $108,0        ; Bpl1Mod
  440.     dc.w    $10a,0        ; Bpl2Mod
  441.  
  442.     dc.w    $100,xxxx    ; Bplcon0 - Definiamo i colori e la risuluzione
  443.  
  444. ;    Qua possiamo mettere i colori della figura; questo pezzo di
  445. ;    copperlist lo genera direttamente l'iffconverter KEFCON, la
  446. ;    salva a parte con un nome a piacere, successivamente si puo'
  447. ;    includere qua con l'opzione TAGLIA&INCOLLA dell'editor caricandolo
  448. ;    in un altro buffer, ad esempio.
  449.  
  450.     dc.w $0180,$0010,$0182,$0111,$0184,$0022,$0186,$0222
  451.     dc.w $0188,$0333,$018a,$0043,$018c,$0333,$018e,$0154
  452.     dc.w $0190,$0444,$0192,$0455,$0194,$0165,$0196,$0655
  453.     dc.w $0198,$0376,$019a,$0666,$019c,$0387,$019e,$0766
  454.     dc.w $01a0,$0777,$01a2,$0598,$01a4,$0498,$01a6,$0877
  455.     dc.w $01a8,$0888,$01aa,$05a9,$01ac,$0988,$01ae,$0999
  456.     dc.w $01b0,$06ba,$01b2,$0a9a,$01b4,$0baa,$01b6,$07cb
  457.     dc.w $01b8,$0bab,$01ba,$0cbc,$01bc,$0dcd,$01be,$0eef
  458.  
  459. ;    Come vedete qua sono definiti tutti i 32 registri colore dell'Amiga,
  460. ;    infatti ho caricato col KEFCON una figura a 32 colori e questa e'
  461. ;    la sua PALETTE generata assieme alla figura in RAW.
  462.  
  463. ;    Qua si possono fare eventuali effetti video con i WAIT....
  464.  
  465.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  466.  
  467.  
  468. Questa copperlist e' sufficiente per la visualizzazione di una figura.
  469. Procediamo dunque con il primo esempio di visualizzazione di un PLAYFIELD
  470. con 3 bitplanes, ossia 8 colori. Nel primo esempio di questa lezione,
  471. visualiziamo una figura gia' convertita in formato RAW, ed e' presente sul
  472. disco del corso: per "CARICARE" la figura in memoria esiste una direttiva
  473. dell'ASMONE, chiamata INCBIN, che permette appunto di caricare dal disco un
  474. certo file di dati e copiarlo nel punto del nostro programma dove sta
  475. l'incbin: se per esempio preparassimo una copperlist e la salvassimo come
  476. file, potremmo caricarcela cosi':
  477.  
  478. COPPERLIST:
  479.     incbin    "copper1"
  480.  
  481. Il risultato e' lo stesso che mettere tanti dc.w equivalenti alle word che
  482. stanno nel file copper1. Nel nostro caso carichiamo l'immagine sotto una
  483. label PIC:
  484.  
  485. PIC:
  486.     incbin    "amiga.320*256*3"
  487.  
  488. La figura comunque non e' in formato TESTO, ma proprio in byte che compongono
  489. i bitplane: provate a caricarla in un buffer di testo e noterete che non si
  490. tratta di un testo.
  491.  
  492. Come notate il nome della figura e' dato secondo le caratteristiche della
  493. figura stessa; e' bene scegliere nomi per le figure che rispecchino le
  494. sue caratteristiche per non rischiare di dimenticarsi di che dimensione e
  495. quanti bitplanes hanno le figure RAW che convertite. Dalla lunghezza di
  496. questa immagine raw pero' si puo' dedurre la risoluzione e il numero di
  497. bitplanes: e' lunga 30720 bytes, ossia 40*256*3 (40 bytes per linea*256 linee,
  498. moltiplicato 3 bitplanes fa 30720). Bastera' dunque dire al COPPER che
  499. la figura si trova alla label PIC, e il gioco e' fatto.
  500.  
  501. Comunque per puntare i bitplanes senza rischi di errore bisogna mettere i
  502. puntatori nella copperlist. Infatti i puntatori dei bitplanes possono
  503. contenere una word ciascuno, ossia la meta' di un indirizzo (infatti un
  504. indirizzo e' lungo una longword! es $00020000). Se usiamo il processore
  505. possiamo anche caricare 2 registri di una word con un solo move.l
  506.  
  507.     MOVE.L    #BITPLANE00,$dff0e0    ; BPL0PT
  508.     MOVE.L    #BITPLANE01,$dff0e4    ; BPL1PT (2 word piu'avanti di $dff0e0)
  509.  
  510. Ma nella copperlist come noto ogni move puo' essere di una WORD solamente:
  511.  
  512.     MOVE.W    #$123,$dff180    diventa   dc.w    $180,$123
  513.  
  514. Nel caso dei puntatori ai bitplanes allora dovremmo "SPEZZARE" ogni indirizzo
  515. lungo una LONGWORD in 2 words per poter fare cosi':
  516.  
  517.     MOVE.W    #BITPL,$dff0e0    ; BPL0PTH (H=word ALTA dell'indirizzo)
  518.     MOVE.W    #ANE00,$dff0e2    ; BPL0PTL (L=word BASSA dell'indirizzo)
  519.     MOVE.W    #BITPL,$dff0e4    ; BPL1PTH
  520.     MOVE.W    #ANE01,$dff0e6    ; BPL1PTL
  521.  
  522.  BPLxPTH    = BitPLane x PoinTer High word , puntatore word alta
  523.  BPLxPTL    = BitPLane x PoinTer Low word , puntatore word bassa
  524.  
  525. Abbiamo spezzato BITPLANE00 (lungo una longword) in 2 words BITPL e ANE00, e
  526. abbiamo ottenunto lo stesso risultato del MOVE.L con 2 MOVE.W, adatti alla
  527. copperlist, dove tradurremmo cosi':
  528.  
  529.     dc.w    $e0,BITPL    ; BPL0PTH \primo bitplane
  530.     dc.w    $e2,ANE00    ; BPL0PTL /
  531.  
  532.     dc.w    $e4,BITPL    ; BPL1PTH \secondo bitplane
  533.     dc.w    $e6,ANE01    ; BPL1PTL /
  534.  
  535.     (infatti $dff0e0 si traduce in copperlist in $e0, ecc.)
  536.  
  537. Questa divisione si dice DIVISIONE DI UNA LONGWORD IN WORD ALTA E WORD BASSA,
  538. dove la word ALTA e' quella a sinistra, BITPL, quella bassa e' quella destra,
  539. qua ANE00. Facciamo un esempio con indirizzi veri:
  540.  
  541. Il bitplane0 si trova a $23400, il bitplane1 a $25c00
  542.  
  543.     dc.w    $e0,$0002    \primo bitplane (word alta)    \$00023400
  544.     dc.w    $e2,$3400    /        (word bassa)    /
  545.  
  546.     dc.w    $e4,$0002    \secondo bitplane (word alta)    \$00025c00
  547.     dc.w    $e6,$5c00    /          (word bassa)    /
  548.  
  549. Vi starete gia' immaginando che per mettere gli indirizzi giusti nella
  550. copperlist sia necessario controllare a che indirizzo sta la figura e cambiare
  551. a mano le word in questione. Invece basta una piccola routine di una decina
  552. di istruzioni per risparmiarci il lavoro di "SPEZZARE" gli indirizzi e
  553. metterli nella copperlist al punto giusto. Questa routine si puo' usare per
  554. PUNTARE qualsiasi figura di qualsiasi dimensione con il numero di bitplanes
  555. che vogliamo, basta cambiare i parametri!!! Il trucco sta nell'uso di una
  556. istruzione particolare del 68000, lo SWAP, che in inglese significa SCAMBIA,
  557. ed in effetti SCAMBIA le 2 words di una longwords facendo diventare BASSA
  558. quella ALTA e viceversa:
  559.  
  560.     MOVE.L    #CANETOPO,d0    ; in d0 mettiamo la longword CANETOPO
  561.  
  562.     SWAP    d0        ; SCAMBIAMO LE WORDS: il risultato e' che
  563.                 ; in d0 abbiamo TOPOCANE!!!!
  564.  
  565. Questo comando funziona solo sui registri DATI.
  566. Allo stesso modo $00023400 viene scambiato in 34000002.
  567. Vediamo la routine:
  568.  
  569.  
  570.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  571.                 ; ossia dove inizia il primo bitplane
  572.  
  573.     LEA    BPLPOINTERS,A1    ; in a1 mettiamo l'indirizzo dei
  574.                 ; puntatori ai planes della COPPERLIST
  575.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  576.                 ; per eseguire il ciclo col DBRA
  577. POINTBP:
  578.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  579.                 ; nella word giusta nella copperlist
  580.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  581.                 ; mettendo la word ALTA al posto di quella
  582.                 ; BASSA, permettendone la copia col move.w!!
  583.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  584.                 ; nella word giusta nella copperlist
  585.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  586.                 ; rimettendo a posto l'indirizzo.
  587.     ADD.L    #40*256,d0    ; Aggiungiamo 10240 ad D0, facendolo puntare
  588.                 ; al secondo bitplane (si trova dopo il primo)
  589.                 ; (cioe' aggiungiamo la lunghezza di un plane)
  590.                 ; Nei cicli seguenti al primo faremo puntare
  591.                 ; al terzo, al quarto bitplane eccetera.
  592.  
  593.     addq.w    #8,a1        ; a1 ora contiene l'indirizzo dei prossimi
  594.                 ; bplpointers nella copperlist da scrivere.
  595.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  596.  
  597. dove cambiamo questa parte di copperlist:
  598.  
  599. BPLPOINTERS:
  600.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane (BPL0PT)
  601.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane (BPL1PT)
  602.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane (BPL2PT)
  603.  
  604. La routine non fa altro che prendere l'indirizzo del bitplane, copiarne la word
  605. BASSA nella copperlist alla word dopo il $e2, ossia il puntatore della word
  606. bassa dell'indirizzo (che si trova 6 bytes dopo BPLPOINTERS, infatti viene
  607. usato un move.w    d0,6(a1), dove in a1 c'e' l'indirizzo di BPLPOINTERS).
  608. Dopo aver sistemato la word bassa, con lo SWAP scambiamo word bassa con word
  609. alta, permettendo con un successivo  move.w d0,2(a1) di copiare la word ALTA,
  610. anziche' quella bassa, nella word dopo il $e0, ossia il puntatore della word
  611. alta del primo bitplane, che si trova, appunto, 2 bytes dopo BPLPOINTERS.
  612. A questo punto abbiamo PUNTATO il primo bitplane: (es. a $23400)
  613.  
  614.  
  615. BPLPOINTERS:
  616.     dc.w $00e0,$0002,$00e2,$3400    ; BPL0PT - primo   bitplane * PUNTATO *
  617.     dc.w $00e4,$0000,$00e6,$0000    ; BPL1PT - secondo bitplane
  618.     dc.w $00e8,$0000,$00ea,$0000    ; BPL2PT - terzo   bitplane
  619.  
  620.             ^        ^
  621.             |        |
  622.           2(a1)          6(a1)    ; notare l'uso degli offset per
  623.                     ; inserire le word nel punto
  624.                     ; giusto.
  625.  
  626. NOTA: con il move.w d0,x(a1) copiamo la word bassa della long in d0 perche'
  627. la copia avviene in questo modo:
  628.  
  629.     move.w    #CANETOPO,2(a1)    ; in 2(a1) viene copiato TOPO
  630.  
  631. Successivamente rimettiamo a posto l'indirizzo con un atro SWAP, per poter
  632. passare al bitplane successivo con un  ADD.L #LUNGHEZZABITPLANE,d0.
  633. Con un  addq.w #8,a1  passiamo a puntare il secondo bitplane, infatti se
  634. in a1 c'era l'indirizzo di BPLPOINTERS, aggiungendo 8 bytes (4 words) passiamo
  635. in questo punto:
  636.  
  637. BPLPOINTERS:
  638.     dc.w $00e0,$0002,$00e2,$3400    ; BPL0PT - primo   bitplane * PUNTATO *
  639. a1PUNTAQUA:
  640.     dc.w $00e4,$0000,$00e6,$0000    ; BPL1PT - secondo bitplane
  641.     dc.w $00e8,$0000,$00ea,$0000    ; BPL2PT - terzo   bitplane
  642.  
  643. Ripetiamo quindi con un loop "DBRA d1,label" questa routine, in questo caso
  644. 3 volte, per puntare 3 bitplanes. (Come ricorderete al loop DBRA bisogna
  645. mettere nel registro che conta i cicli il numero richiesto meno 1, che e'
  646. il primo che non viene contato: qua infatti in d1 viene messo il valore 2.
  647.  
  648. Questa routine ha la struttura classica delle routines che generano effetti
  649. col copper, dunque capirla esattamente e' fondamentale. Una routine simile
  650. la avete gia' trovata in Lezione3h.s, in quel caso c'erano dei loop DBRA
  651. per cambiare 29 wait della copperlist.
  652.  
  653. Caricate Lezione4a.s per vedere in pratica l'esecuzione di questa routine
  654. PUNTABITPLANES con il DEBUG.
  655.  
  656. A questo punto mancano solo due "RIFINITURE" al nostro listato per evitare
  657. problemi nel visualizzare un'immagine: un paio di istruzioni per disabilitare
  658. il chipset AGA, che rende compatibile con l'Amiga 1200 e 4000 il nostro
  659. lavoro, e qualche altra linea nella copperlist per far sparire gli sprites,
  660. che altrimenti girovagherebbero a caso per il nostro disegno provocando
  661. disturbi intermittenti. Per diasbilitare l'AGA bastano queste 2 linee:
  662.  
  663.     move.w    #0,$dff1fc        ; FMODE - Disattiva l'AGA
  664.     move.w    #$c00,$dff106        ; BPLCON3 - Disattiva l'AGA
  665.  
  666. E se volete proprio essere sicuri potete aggiungere questa: (palette sprite)
  667.  
  668.     move.w    #$11,$dff10c        ; BPLCON4 - Resetta palette Sprite
  669.  
  670. Basta eseguirle dopo aver puntato la nuova copperlist, mentre per fermare
  671. gli sprites ubriachi basta puntare i loro puntatori a ZERO:
  672.  
  673.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000
  674.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  675.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  676.     dc.w    $13e,$0000
  677.  
  678. (Nota: I registri da $dff120 a $dff13e si chiamano SPR0PT,SPR1PT... SPR7PT.)
  679.  
  680. Parleremo degli sprites in seguito, per ora basta che li togliate di mezzo
  681. aggiungendo con un semplice COPY+INSERT (Amiga+b+c+i) questo pezzo di
  682. testo alla vostra copperlist. Gli sprites non apparivano con i bitplanes
  683. azzerati, mentre accendendo anche un solo bitplane gli sprite si fanno vivi.
  684.  
  685. Finalmente potete vedere in pratica come viene visualizzata una figura
  686. caricandovi Lezione4b.s in un buffer di testo Fx a piacere.
  687.  
  688. Avete provato ad aggiungere effetti copper alla figura??? Caricate l'esempio
  689. Lezione4c.s per una fusione di alcuni degli effetti gia' visti.
  690.  
  691. Avete capito ora l'importanza del WAIT in una copperlist con dei bitplane?
  692. Ci puo' far cambiare i colori (e non solo) anche ogni linea!
  693. Non ci resta che visualizzare un'immagine fatta da voi anziche' quella
  694. nel corso. Per fare cio' dovete disporre di una figura in 320x256 a 8 colori,
  695. se non la avete fatevela anche sommariamente con un programma di disegno,
  696. oppure convertite con ADPRO o altro programma una figura a piu' colori
  697. in quel formato. Disponendo di quella immagine in formato IFF (su un disco
  698. formattato) con il nome che preferite, immaginiamo che si chiami "FIGURA",
  699. bisogna convertirla in formato RAW, ossia nel formato REALE dei bitplanes
  700. leggibili dal Copper, caricandola con l'iffconverter in questo disco, il
  701. "KEFCON", che ha molte funzioni di cui pero' parleremo in seguito.
  702. Leggete queste istruzioni prima di caricarlo:
  703. Il converter e' programmato in assembler hardware, dunque non supporta il
  704. multitasking e non si puo' "spostare" la sua finestra per leggere la lezione,
  705. dato che la sua finestra e' una copperlist propria e non di sistema, che pero'
  706. e' compatibile AGA e non crea problemi (I buoni vecchi programmatori!).
  707. Preparatevi prima la figura in un disco formattato, che poi inserirete dopo
  708. aver caricato il KEFCON nel df0: (disk drive interno) o nel df1: (disk drive
  709. esterno) se lo avete.
  710. Una volta caricato, vi apparira' un quadro comandi in alto, con delle opzioni,
  711. quelle che ci interessano sono: (vi faccio uno schema dei "PULSANTI")
  712.  
  713.      ------          ----------
  714.     | SAVE |    | IFF ILBM |
  715.      ------      ----------
  716.  
  717.      ------         ----------
  718.     | LOAD |    | READ DIR |
  719.      ------      ----------
  720.  
  721.      ------
  722.     | QUIT |
  723.      ------ 
  724.  
  725.   ------------------------------------
  726.  | QUA C'E UNA FINESTRELLA A STRISCIA | -Dove si deve scrivere il nome del file
  727.   ------------------------------------
  728.  
  729. LOAD, SAVE e QUIT significano naturalmente CARICA, SALVA ed ESCI DAL PROGRAMMA
  730. READ DIR serve a visualizzare nella finestra a destra la lista dei file che
  731. sono nel disco, ossia la sua directory.
  732. IFF ILBM e' un pulsante che indica il tipo di file che si puo' salvare o
  733. caricare, in questo caso e' giustamente ad IFF ILBM perche' dobbiamo caricare
  734. una figura iff; successivamente per salvarla in RAW bastera' clickare su
  735. quel pulsante, il quale si cambiera' in "RAW NORM", e la figura sara'
  736. salvata come RAW; tra i possibili formati ci sono anche SPRITE e RAW BLIT,
  737. quelli li useremo in seguito. Per ora ci interessano solo "RAW NORM" e "COPPER"
  738. dove con COPPER si salva la PALETTE dei colori direttamente in un file di
  739. testo con i DC.W da inserire nella nostra copperlist!
  740. Per fare la conversione, clickate sulla finestrella a striscia in basso a
  741. sinistra dove appare la scitta "allocated GFX-buffer" e si cambiera' in "df0:"
  742. ossia il drive interno. Se avete inserito il disco con la figura iff in df0:
  743. lasciatelo, oppure indicate il nome del drive dove avete messo il disco (ad
  744. esempio df1:, oppure dh0: per l'hardisk). Per leggere la lista dei file
  745. premete READ DIR, e potrete selezionare la vostra figura clickando col mouse
  746. sopra il suo nome e premendo il pulsante "LOAD".
  747. Vedrete a questo punto comparire la figura, che potete vedere per intero
  748. scorrendola in alto e basso con i tasti cursore.
  749. Notate che una volta caricata la figura appaiono le sue caratteristiche
  750. nella finestrella a striscia: "bitplane $2800, total $7800". Infatti ogni
  751. singolo bitplane e' lungo $2800 (ossia 10240 decimale, 40*256), e in totale
  752. la figura RAW e' lunga $7800, ossia 30720 (40*256*3).
  753. Sopra sono indicate anche le altre caratteristiche:
  754.  
  755.  WIDTH: 320 (larghezza), HEIGHT 256 (LUNGHEZZA), DEPTH 3 (NUMERO BITPLANES)
  756.  
  757. Ora clickate sul pulsante "IFF ILBM" facendolo cambiare in "RAW NORM"; per
  758. salvare la pic in RAW premete un'altra volta col tasto sinistro sulla
  759. finestrella a striscia e definite il nome, ad esempio "df0:FIGURA.RAW" e
  760. premete il pulsante "SAVE". Il RAW da includere con l'INCBIN e' salvato!
  761. Ora manca solo la palette dei colori per la nostra COPPERLIST; per selezionare
  762. il modo 'salvataggio palette' clickate 5 volte sul gadget "RAW NORM", ossia
  763. fino a che non si cambia in "COPPER". Per salvarla ripetete l'operazione di
  764. clickaggio della finestrella a striscia, dategli un nome, es: "df0:FIGURA.S",
  765. e premete il pulsante "SAVE". A questo punto potete anche uscire, perche'
  766. abbiamo salvato sia il .RAW che il testo della palette in dc.w da includere
  767. nella nostra copperlist.
  768.  
  769. Per visualizzarvi la figura, caricate l'esempio "Lezione4b.s" e fate queste 2
  770. sostituzioni: cambiate il nome della figura da caricare mettendoci la vostra,
  771. e inserite la palette della vostra figura eliminando quella preesistente:
  772.  
  773. PIC:
  774.     incbin    "amiga.320*256*3"
  775.  
  776. lo potete cambiare in:
  777.  
  778. PIC:
  779.     incbin    "df0:figura.raw"
  780.  
  781. oppure, scrivendo "v df0:" dalla linea comandi basta un:
  782.  
  783. PIC:
  784.     incbin    "figura.raw"
  785.  
  786. Per la palette potete fare in 2 modi: o caricate "FIGURA.S" in un altro
  787. biffer e poi lo copiate con Amiga+b+c+i, oppure potete usare il comando
  788. dell'Asmone "I", ossia INSERT, che inserisce un testo nel punto in cui
  789. vi trovate col cursore prima di premere ESC per passare alla linea comandi.
  790. Comunque facciate, togliete la vecchia palette con il CUT (TAGLIA) dell'editor:
  791. Amiga+b per selezionare il blocco, Amiga+x per eliminarlo.
  792.  
  793. Ha funzionato?? Spero di si, altrimenti significa che avete sbagliato qualche
  794. passaggio, pena la ripetizione di tutta l'operazione.
  795.  
  796. Per continuare in bellezza ora proviamo a visualizzare una figura a 32 colori:
  797. basta che disponiate della consueta figura in 320x256, questa volta a 32
  798. colori (se proprio non la avete caricate il DeLuxe Paint e "schizzate" qualche
  799. oscenita'). Convertitela come avete fatto per la figura precedente, questa
  800. volta noterete che dopo il caricamento le caratteristiche cincideranno con le
  801. previsioni: "bitplane $2800, total $c800", infatti ogni bitplane e' sempre di
  802. $2800 bytes, mentre il totale e' $c800, ossia 51200 ($2800*5), essendo una
  803. figura a 32 colori composta di 5 bitplanes. Salvate il .RAW e la palette,
  804. ad esempio con nomi come FIGURA32.RAW e FIGURA32.s.
  805.  
  806. Per visualizzarla dovrete fare al sorgente i due cambiamenti di prima, ossia
  807. far caricare la nuova figura dall'incbin e sostituire la vecchia palette con
  808. quella nuova (che come noterete e' piu' lunga coinvolgendo tutti i 32 registri
  809. colore). In piu' dovete cambiare il numero di bitplanes nella routine di
  810. puntamento e aggiungere i bitplanes mancanti alla copperlist:
  811.  
  812.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  813.     LEA    BPLPOINTERS,A1    ; in a1 i puntatori in COP
  814. **->    MOVEQ    #4,D1        ; numero di bitplanes -1 (qua sono 5!!!!!)
  815.                 ; per eseguire il ciclo col DBRA
  816. POINTBP:
  817.     ....
  818.  
  819. 1) Cambiate il MOVEQ #2,d1 in MOVEQ #4,d1, ossia mentre prima eseguivamo 3
  820. cicli DBRA per 3 bitplanes (3-1=2), ora eseguiamo 5 cicli (5-1=4) per 5
  821. bitplanes. Ma allora bisogna aggiungere i puntatori di bitplanes mancanti
  822. nella copperlist:
  823.  
  824. BPLPOINTERS:
  825.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane - BPL0PT
  826.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane - BPL1PT
  827.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane - BPL2PT
  828.     dc.w $ec,$0000,$ee,$0000    ;quarto     bitplane (AGGIUNTO ORA!)
  829.     dc.w $f0,$0000,$f2,$0000    ;quinto     bitplane (AGGIUNTO ORA!)
  830.  
  831. Ultima e piu' importante modifica bisogna "accendere" 5 bitplanes anziche' 3,
  832. questo lo si puo' fare modificando il $dff100 (bplcon0) nella copperlist:
  833.  
  834.  
  835.             ; 5432109876543210
  836.     dc.w    $100,%0101001000000000    ; bits 14,12 accesi!! (5 = %101)
  837.  
  838. Assemblando il tutto dovrebbe apparire la figura a 32 colori.
  839.  
  840. Da questi due esempi potete intuire facilmente come visualizzare immagini
  841. a 2,4 e 16 colori! basta cambiare il numero di loop nella routine che punta i
  842. bitplanes e sistemare i bit giusti in $dff100 (BPLCON0).
  843.  
  844. Vediamo ora di visualizzare una figura in EHB a 64 colori e una in HAM a 4096
  845. colori, attivando i due modi grafici speciali.
  846.  
  847. Partiamo da quella in HAM: fatevi una figura in 320x256 in HAM, oppure cercate
  848. una delle tante figure ham che si trovano spesso nei dischi di riviste o nei
  849. dischi di immagini "SEXY", che sono per lo piu' in HAM, dato che la fedelta'
  850. e' importantissima per l'immagine di una donna nuda. Credo anzi che sia piu'
  851. piacevole visualizzare una donna nuda che un cesto di frutta.
  852. Caricate come da copione la figura in HAM 320x256 col KEFCON e salvate il RAW
  853. e la COPPERLIST.
  854. Purtroppo il KEFCON ha un errore di programmazione per cui quando vengono
  855. caricate su A4000 figure a 6 bitplanes, siano HAM o EHB, si provoca una specie
  856. di "spappolamento" dei nueri e dei segni di punteggiatura (,.:) del quadro di
  857. comando, (sull'Amiga500/2000/600 funziona invece!) per cui potete vedere
  858. correttamente solo le parole, ma non e' certo un problema, in quanto basta
  859. clickare sulla finestrella a striscia ed aggiungere un .RAW, per esempio, al
  860. nome della PIC che e' visibile, poi un .s per salvare la copperlist.
  861. Le modifiche da fare sono l'aggiunta degli ultimi puntatori al bitplane 6
  862. in copperlist, la sostituzione della palette e il settaggio del numero di cicli
  863. della routine di puntamento a 6:
  864.  
  865.  
  866. BPLPOINTERS:
  867.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane - BPL0PT
  868.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane - BPL1PT
  869.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane - BPL2PT
  870.     dc.w $ec,$0000,$ee,$0000    ;quarto     bitplane - BPL3PT
  871.     dc.w $f0,$0000,$f2,$0000    ;quinto     bitplane - BPL4PT
  872.     dc.w $f4,$0000,$f6,$0000    ;sesto     bitplane (AGGIUNTO ORA!)
  873.  
  874.  
  875. **->    MOVEQ    #5,D1        ; numero di bitplanes -1 (qua sono 6!!!!!)
  876.                 ; per eseguire il ciclo col DBRA
  877. POINTBP:
  878.     ...
  879.  
  880. Nonche' il BPLCON0:
  881.  
  882.       ; 5432109876543210
  883.  dc.w $100,%0110101000000000    ; ---> 6 plane in HAM lowres (4096 colori)
  884.                 ; BIT 11 settato = HAM!
  885.  
  886. Il funzionamento teorico dell'HAM sara' affrontato meglio in seguito.
  887.  
  888.                 *
  889.  
  890. Per visualizzare una immagine in Extra Half Bright, invece, convertitene una
  891. col KEFCON, fatela caricare dall'incbin, sostituite la palette, lasciate
  892. puntare 6 bitplanes alla routine e azzerate il bit 11 del bplcon0:
  893.  
  894.       ; 5432109876543210
  895.  dc.w $100,%0110001000000000    ; ---> 6 plane in EHB lowres (64 colori)
  896.                 ; BIT 11 azzerato = Extra Half Bright
  897.  
  898. NOTA: Il modo EHB ha 64 colori, ma non sono tutti e 64 selezionabili
  899. liberamente, in quanto l'Amiga ha solo 32 registri colore; gli altri 32
  900. colori sono come i primi 32 ma piu' scuri, a "MEZZA LUCE", ossia "HALF BRIGHT".
  901.  
  902. Ora che sappiamo visualizzare delle figure, vediamo che effetti si possono fare
  903. con i registri di scorrimento. Caricate la LEZIONE5.TXT con "r"
  904.  
  905.